package com.huawei.crm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;

import java.io.Serializable;

/**
 * 通用Repository接口
 *
 * @author luohua
 * @version 2021年11月24日10:55:06
 *
 * @param <T>
 * @param <ID>
 */
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID>, BaseMapper<T> {
	
	/**
     * 保存一个实体，属性值为NULL也会保存，不会使用数据库默认值。
     *
     * @param entity
     * @return
     */
	@Override
	int insert(T entity);
	
	/**
     * 保存一个实体，属性值为NULL不会保存，会使用数据库默认值。
     *
     * @param entity
     * @return
     */
	int insertSelective(T entity);
	
	/**
     * 根据主键字段进行查询，方法参数必须包含完整的主键属性，查询条件使用等号
     *
     * @param id
     * @return
     */
    T selectByPrimaryKey(ID id);
    	
	/**
     * 根据主键更新实体全部字段，属性值为NULL也会被更新。
     *
     * @param entity
     * @return
     */
	int updateByPrimaryKey(T entity);
	
	/**
     * 根据主键更新属性不为NULL的值。
     *
     * @param entity
     * @return
     */
	int updateByPrimaryKeySelective(T entity);

    /**
     * 根据主键字段进行删除，方法参数必须包含完整的主键属性
     *
     * @param id
     * @return
     */
    int deleteByPrimaryKey(ID id);
        
}